<?php
/**
 * Zweierpotenz
 * Bietet Operationen, um aus einzelnen Potenzzahlen (1+2+4+8+...) eine Zweierpotenzsumme uns umgekehrt zu generieren
 *
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2013 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 *
 * */


Class Yapary_Math_PowerOfTwo
{

	private $intVal = 4294967296;


	function __construct ( )
	{

	}


	/**
	 * Erstellt aus einem Array mit Zweierpotenzen eine Zweierpotenzsumme
	 * @param array $arrPowerOfTwo	: Array mit Zweierpotentenz im Format array(0=>1, 1=>2, 2=>4, 3=>8, ...)
	 * @return int
	 * */
	public function getSum (array $_arrPowerOfTwo) {
		$result = 0;
		if (count($_arrPowerOfTwo)) {
			foreach ($_arrPowerOfTwo as $key => $val) {
				$result+=$val;
			}
		}

		return $result;
	}


	/**
	 * Erstellt aus einer Zweierpotenzsumme ein Array mit Zweierpotenzen
	 * @param int $_sum	: Zweierpotenzsumme
	 * @return array: Format array(0=>1, 1=>2, 2=>4, 3=>8, ...)
	 * */
	public function getArray ($_sum) {
		$number = $this->intVal;
		$arrResult = array();

		do {
			if ($_sum >= $number) {
				$_sum = $_sum-$number;
				$arrResult[] = $number;
			}
			$number/=2;
		} while ($number >= 1);

		return $arrResult;
	}


}


?>